package cn.fz.mpdemo.exception;

import cn.fz.mpdemo.domain.vo.ResultVO;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;

/**
 * 统一异常处理类
 */
@Slf4j
@RestControllerAdvice
public class GlobalExceptionHandler {
    @ExceptionHandler(BizException.class)
    public ResultVO<?> handleBusinessException(BizException bx) {
        log.info("接口调用业务异常信息{}", bx.getMessage());
        // 返回统一处理类
        return ResultVO.failed(bx.getMessage());
    }

    /**
     * 捕获 {@code ParamException} 异常
     */
    @ExceptionHandler(ParamException.class)
    public ResultVO<?> paramExceptionHandler(ParamException ex) {
        log.info("接口调用异常：{},异常信息{}", ex.getMessage(), ex.getMessage());
        // 返回统一处理类
        return ResultVO.failed(ex.getMessage());
    }

    /**
     * 顶级异常捕获并统一处理，当其他异常无法处理时候选择使用
     */
    @ExceptionHandler(Exception.class)
    public ResultVO<?> handle(Exception ex) {
        log.info("接口调用异常：{},异常信息{}", ex.getMessage(), ex.getMessage());
        // 返回统一处理类
        return ResultVO.failed(ex.getMessage());
    }
}
